package com.bcts.rrh.drawingboard;

import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.nio.FloatBuffer;
import java.util.ArrayList;

import javax.microedition.khronos.opengles.GL10;

public class DrawBgImg {
    final float UNIT_SIZE=0.5f;
    private FloatBuffer   mVertexBuffer;//顶点坐标数据缓冲
    private FloatBuffer   mNormalBuffer;//顶点着色数据缓冲
    private FloatBuffer mTextureBuffer;//顶点纹理数据缓冲
    int vCount=0;//顶点数量
    float yAngle;//y轴旋转角度
    int xOffset;//x偏移量
    int zOffset;//z平移量
    int texId;//纹理ID
    int width;//width个单位
    int height;//height个单位
    float x=1.647f;
    float y=0.8f;
    float z=-95;

    public DrawBgImg(int texId)
    {
        this.texId=texId;
//        this.width=width;
//        this.height=height;

        //顶点坐标数据的初始化================begin============================
        vCount=6;//6个顶点
        float[] vertices={
          -x,y,z,
          x,y,z,
          -x,-y,z,
          x,y,z,
          -x,-y,z,
          x,-y,z
        };

        //创建顶点坐标数据缓冲
        //vertices.length*4是因为一个Float四个字节
        ByteBuffer vbb = ByteBuffer.allocateDirect(vertices.length*4);
        vbb.order(ByteOrder.nativeOrder());//设置字节顺序
        mVertexBuffer = vbb.asFloatBuffer();//转换为int型缓冲
        mVertexBuffer.put(vertices);//向缓冲区中放入顶点坐标数据
        mVertexBuffer.position(0);//设置缓冲区起始位置
        //特别提示：由于不同平台字节顺序不同数据单元不是字节的一定要经过ByteBuffer
        //转换，关键是要通过ByteOrder设置nativeOrder()，否则有可能会出问题
        //顶点坐标数据的初始化================end============================

        float textureCoor[]=new float[]{
          0,0,1,0,0,1,
          1,0,0,1,1,1
        };
        ByteBuffer tbb = ByteBuffer.allocateDirect(textureCoor.length*4);
        tbb.order(ByteOrder.nativeOrder());//设置字节顺序
        mTextureBuffer = tbb.asFloatBuffer();//转换为int型缓冲
        mTextureBuffer.put(textureCoor);//向缓冲区中放入顶点着色数据
        mTextureBuffer.position(0);//设置缓冲区起始位置
    }

    public void drawSelf(GL10 gl)
    {
        gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);//启用顶点坐标数组
        gl.glDisable(GL10.GL_LIGHTING);
        //gl.glEnable(GL10.GL_LIGHT0);
//        gl.glLightfv(GL10.GL_LIGHT0, GL10.GL_AMBIENT, lightAmbBfr);
//        gl.glLightfv(GL10.GL_LIGHT0, GL10.GL_DIFFUSE, lightDifBfr);
//        gl.glLightfv(GL10.GL_LIGHT0, GL10.GL_POSITION, lightPosBfr);

        //为画笔指定顶点坐标数据
        gl.glVertexPointer
                (
                        3,				//每个顶点的坐标数量为3  xyz
                        GL10.GL_FLOAT,	//顶点坐标值的类型为 GL_FIXED
                        0, 				//连续顶点坐标数据之间的间隔
                        mVertexBuffer	//顶点坐标数据
                );

        if (this.texId>0){
            gl.glColor4f(1.0f,1.0f,1.0f,0.8f);
            //开启纹理
            gl.glEnable(GL10.GL_TEXTURE_2D);
            //允许使用纹理ST坐标缓冲
            gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
            //为画笔指定纹理ST坐标缓冲
            gl.glTexCoordPointer(2, GL10.GL_FLOAT, 0, mTextureBuffer);
            //绑定当前纹理
            gl.glBindTexture(GL10.GL_TEXTURE_2D, texId);
        }
        else {
            gl.glColor4f(25.0f/255.0f,67.0f/255.0f,56.0f/255.0f,1.0f);
            gl.glDisableClientState(GL10.GL_TEXTURE_COORD_ARRAY);//禁用纹理数组
            gl.glDisable(GL10.GL_TEXTURE_2D);
        }

        //绘制图形
        gl.glDrawArrays
                (
                        GL10.GL_TRIANGLES, 		//以三角形方式填充
                        0, 			 			//开始点编号
                        vCount					//顶点的数量
                );
        if (this.texId>0){
            gl.glDisable(GL10.GL_TEXTURE_2D);//关闭纹理
            gl.glDisableClientState(GL10.GL_TEXTURE_COORD_ARRAY);//禁用纹理数组
        }

    }

    public void setTexId(int texId) {
        this.texId = texId;
    }
}
